package com.wupaas.boot.core.business.escape;

import cn.afterturn.easypoi.util.PoiReflectorUtil;

import java.util.List;
import java.util.Map;

/**
 * 名称转义工具类
 * @author JueYue
 * @date 2021-05-21-5-29
 * @since 1.0
 */
public class NameEscapeUtil {

    /**
     * 集合,以及需要转义的字段,原字段改值
     *
     * @param list
     * @param filedNameArr
     * @param nameEscapeService
     */
    public static void convertToName(List list,INameEscapeService nameEscapeService, String... filedNameArr) {
        list.forEach(o -> {
            for (int i = 0; i < filedNameArr.length; i++) {
                String filedName = filedNameArr[i];
                if (o instanceof Map) {
                    ((Map) o).put(filedName, nameEscapeService.getName(filedName));
                } else {
                    Object key = PoiReflectorUtil.fromCache(o.getClass()).getValue(o, filedName);
                    if (key != null) {
                        PoiReflectorUtil.fromCache(o.getClass()).setValue(o, filedName, nameEscapeService.getName(key.toString()));
                    }
                }
            }
        });
    }

    /**
     * 集合,以及需要转义的字段,新字段赋值
     *
     * @param list
     * @param filedName
     * @param targetName
     */
    public static void convertToNewName(List list,INameEscapeService nameEscapeService, String filedName, String targetName) {
        list.forEach(o -> {
            if (o instanceof Map) {
                ((Map) o).put(targetName, nameEscapeService.getName(filedName));
            } else {
                Object key = PoiReflectorUtil.fromCache(o.getClass()).getValue(o, filedName);
                if (key != null) {
                    PoiReflectorUtil.fromCache(o.getClass()).setValue(o, targetName, nameEscapeService.getName(key.toString()));
                }
            }
        });
    }
}
